Perpindahan dari makro gaya C ke literatur aman tipe C++ mewakili perubahan mendasar dalam kenyamanan penggunaan bahasa, menyelesaikan perangkap "NULL" di mana ambiguitas makro nol menyebabkan kesalahan logika yang diam-diam terjadi.
1. Kegagalan Resolusi Saling Timpang
Pada standar lama (C++98), NULL sering didefinisikan sebagai 0. Saat dilewatkan ke fungsi yang memiliki banyak versi, kompiler mengenali NULL sebagai bilangan bulat. Hal ini dibuktikan oleh:
std::cout << "NULL adalah int";
2. Solusi nullptr
C++11 memperkenalkan nullptr, sebuah kata kunci dengan tipe std::nullptr_t. Berbeda dengan makro, ia tidak dapat dikonversi secara implisit ke tipe bilangan bulat (kecuali bool), memastikan overload khusus pointer dipilih.
3. Keterhubungan & Interoperabilitas
C++ modern membutuhkan extern "C" untuk mencegah pengacakan nama saat menghubungkan dengan kode C (misalnya, dikompilasi dengan gcc). Menjaga pointer aman tipe pada batas ini sangat penting.
$$\text{std::nullptr\_t} \neq \text{int}$$